/**
 * APITable <https://github.com/apitable/apitable>
 * Copyright (C) 2022 APITable Ltd. <https://apitable.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/* eslint-disable @typescript-eslint/naming-convention */
import { IExpandRecord } from 'interface';
import { useCallback, useContext } from 'react';
import { WidgetConfigContext } from '../context';
import { useMeta } from './use_meta';

/**
 * you can use this methods to initialize, and get a more focused editing experience by executing the function 
 * to expand a record modal.
 * 
 * @returns A function that expands the modal for a record with the specified parameters.
 * 
 * ### Example
 * ```js
 * import { useExpandRecord, useRecords } from '@apitable/widget-sdk';
 *
 * // expand first record
 * function ExpandFirstRecord() {
 *   const firstRecord = useRecords(view.id)[0];
 *   const expandRecord = useExpandRecord();
 *   return <button onClick={() => expandRecord({recordIds: [firstRecord?.id]})}>Expand first record</button>;
 * }
 * ```
 * 
 */
export function useExpandRecord(): ((expandRecordParams: IExpandRecord) => void) {
  const { expandRecord } = useContext(WidgetConfigContext);
  const metaDatasheetId = useMeta().datasheetId!;
  return useCallback(({
    recordIds,
    viewId,
    datasheetId
  }: any) => {
    expandRecord({
      viewId,
      recordIds,
      activeRecordId: recordIds[0]!,
      datasheetId: datasheetId ?? metaDatasheetId,
    });
  }, [metaDatasheetId, expandRecord]);
}
